<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="../js/vue.js"></script>
    <style>
        * {
            padding: 0;
            margin: 0;
        }

        li {
            list-style: none;
        }

        a {
            text-decoration: none;
            color: inherit;
        }

        html {
            font-size: -webkit-calc(100vw / 7.5);
        }

        body {
            font-size: 0.24rem;
        }

        html,
        body,
        #app {
            width: 100%;
            height: 100%;
        }

        #app {
            display: flex;
            flex-direction: column;
            align-content: space-between;
        }

        #app .app-main {
            display: flex;
            flex-direction: column;
            align-content: space-between;
            flex: 1;
        }

        #app .app-header,
        #app .app-footer {
            height: 1rem;
            background-color: grey;
        }

        #app .app-content {
            flex: 1;
            overflow-y: auto;
        }

        #app .app-footer {
            display: flex;
            text-align: center;
            line-height: 1rem;
        }

        #app .app-footer a {
            flex: 1;
        }
    </style>
</head>

<body>
    <div id="app">
        <!-- <div class="app-main">
            <div class="app-header"></div>
            <div class="app-content">
                主页
            </div>
        </div> -->
        <component :is="curCom"></component>

        <div class="app-footer">
            <!-- 通过锚点实现同页面不同位置跳转 =>  hash值 -->
            <a href="#/">主页</a>
            <a href="#/list">列表</a>
            <a href="#/car">购物车</a>
            <a href="#/mine">我的</a>
        </div>
    </div>
</body>
<script type="module">
    // 单页面应用  => 把所有的页面都注册为组件实例,然后在根组件及其子组件中使用

    // 路由: 对应不同的url地址展示不同的内容  
    // 站点: 对应url地址显示不同的页面(站点展示)  页面路由  
    // 后端路由:  接口  (向不同的url地址发送请求 => 返回不同的响应结果)

    // 前端路由:
    // history模式  => history.pushState


    // hash模式  => 用hash值来记录访问的页面,模拟路径记录 => 实现路由切换    ( #one  #two  => 可以实现当前页面跳转)
    // 优点:
    // 1. 前后端交互时hash值不会传递给后端
    // 2. 修改hash值时当前页面不会刷新

    // 如何用hash值模拟路径
    // #/ 根路由
    // #/car  一级路由
    // #/car/info  二级路由



    import Home from "../components/home.js";
    import List from "../components/list.js";
    import Car from "../components/car.js";
    import Mine from "../components/mine.js";

    // 路由配置 => 将hash路径和组件进行关联
    let routes = [{
        path: "/",  // 路由地址
        name: "home", // 组件名称
        component: Home,  // 组件配置
    },{
        path: "/list",  // 路由地址
        name: "list", // 组件名称
        component: List,  // 组件配置
    },{
        path: "/car",  // 路由地址
        name: "car", // 组件名称
        component: Car,  // 组件配置
    },
    {
        path: "/mine",  // 路由地址
        name: "mine", // 组件名称
        component: Mine,  // 组件配置
    }]


    var vm = new Vue({
        el: "#app",
        data: {
            curCom: "home",
        },
        methods:{
            hashHandler(){
                console.log("hash值发生了改变");
                // hash处理
                var hash = location.hash.replace("#","")||"/";
                console.log(hash); // / /list /home /mine

                var currentRoute = routes.find(v=> v.path == hash);
                if(currentRoute){
                    this.curCom = currentRoute["name"];
                }
            }
        },
        mounted() {
            this.hashHandler(); // 组件挂载时默认处理一次

            // 监听hash值改变,对应hash地址找到对应的组件展示到页面中
            window.addEventListener("hashchange",()=>{
                this.hashHandler();
            })

        },
        components: {
            Home: Home,
            List,
            Car,
            Mine,
        }
    })
</script>
<script>
    /* let Home = {
        data(){
            return {

            }
        },
        template:`<div class="app-main">
            <div class="app-header">主页</div>
            <div class="app-content">
                主页xxx
            </div>
        </div>`
    }

    let List = {
        data(){
            return {

            }
        },
        template:`<div class="app-main">
            <div class="app-header">列表</div>
            <div class="app-content">
                列表xxx
            </div>
        </div>`
    }

    let Car = {
        data(){
            return {

            }
        },
        template:`<div class="app-main">
            <div class="app-header">购物车</div>
            <div class="app-content">
                购物车xxx
            </div>
        </div>`
    }

    let Mine = {
        data(){
            return {

            }
        },
        template:`<div class="app-main">
            <div class="app-header">我的</div>
            <div class="app-content">
                我的xxx
            </div>
        </div>`
    } */

</script>

</html>